package 时间类

import (
	"time"
)

// CreateFromStdTime creates a Carbon instance from standard time.Time.
// 从标准的 time.Time 创建 Carbon 实例
func X创建并按gosdk时间(time Gosdk时间, 时区 ...string) *Carbon {
	c := X创建(time)
	if len(时区) > 0 {
		c.loc, c.X错误 = parseTimezone(时区[0])
	}
	return c
}

// CreateFromTimestamp creates a Carbon instance from a given timestamp with second precision.
// 从给定的秒精度时间戳创建 Carbon 实例
func X创建并按秒时间戳(秒时间戳 int64, 时区 ...string) *Carbon {
	c := X创建()
	if len(时区) > 0 {
		c.loc, c.X错误 = parseTimezone(时区[0])
	}
	if c.X是否有错误() {
		return c
	}
	c.time = time.Unix(秒时间戳, 0)
	return c
}

// CreateFromTimestampMilli creates a Carbon instance from a given timestamp with millisecond precision.
// 从给定的毫秒精度时间戳创建 Carbon 实例
func X创建并按毫秒时间戳(毫秒 int64, 时区 ...string) *Carbon {
	c := X创建()
	if len(时区) > 0 {
		c.loc, c.X错误 = parseTimezone(时区[0])
	}
	if c.X是否有错误() {
		return c
	}
	c.time = time.Unix(毫秒/1e3, (毫秒%1e3)*1e6)
	return c
}

// CreateFromTimestampMicro creates a Carbon instance from a given timestamp with microsecond precision.
// 从给定的微秒精度时间戳创建 Carbon 实例
func X创建并按微秒时间戳(微秒 int64, 时区 ...string) *Carbon {
	c := X创建()
	if len(时区) > 0 {
		c.loc, c.X错误 = parseTimezone(时区[0])
	}
	if c.X是否有错误() {
		return c
	}
	c.time = time.Unix(微秒/1e6, (微秒%1e6)*1e3)
	return c
}

// CreateFromTimestampNano creates a Carbon instance from a given timestamp with nanosecond precision.
// 从给定的纳秒精度时间戳创建 Carbon 实例
func X创建并按纳秒秒时间戳(纳秒 int64, 时区 ...string) *Carbon {
	c := X创建()
	if len(时区) > 0 {
		c.loc, c.X错误 = parseTimezone(时区[0])
	}
	if c.X是否有错误() {
		return c
	}
	c.time = time.Unix(纳秒/1e9, 纳秒%1e9)
	return c
}

// CreateFromDateTime creates a Carbon instance from a given date and time.
// 从给定的年、月、日、时、分、秒创建 Carbon 实例
func X创建并按年月日时分秒(年, 月, 日, 时, 分, 秒 int, 时区 ...string) *Carbon {
	return create(年, 月, 日, 时, 分, 秒, 0, 时区...)
}

// CreateFromDateTimeMilli creates a Carbon instance from a given date, time and millisecond.
// 从给定的年、月、日、时、分、秒、毫秒创建 Carbon 实例
func X创建并按年月日时分秒毫秒(年, 月, 日, 时, 分, 秒, 毫秒 int, 时区 ...string) *Carbon {
	return create(年, 月, 日, 时, 分, 秒, 毫秒*1e6, 时区...)
}

// CreateFromDateTimeMicro creates a Carbon instance from a given date, time and microsecond.
// 从给定的年、月、日、时、分、秒、微秒创建 Carbon 实例
func X创建并按年月日时分秒微秒(年, 月, 日, 时, 分, 秒, 微秒 int, 时区 ...string) *Carbon {
	return create(年, 月, 日, 时, 分, 秒, 微秒*1e3, 时区...)
}

// CreateFromDateTimeNano creates a Carbon instance from a given date, time and nanosecond.
// 从给定的年、月、日、时、分、秒、纳秒创建 Carbon 实例
func X创建并按年月日时分秒纳秒(年, 月, 日, 时, 分, 秒, 纳秒 int, 时区 ...string) *Carbon {
	return create(年, 月, 日, 时, 分, 秒, 纳秒, 时区...)
}

// CreateFromDate creates a Carbon instance from a given date.
// 从给定的年、月、日创建 Carbon 实例
func X创建并按年月日(年, 月, 日 int, 时区 ...string) *Carbon {
	return create(年, 月, 日, 0, 0, 0, 0, 时区...)
}

// CreateFromDateMilli creates a Carbon instance from a given date and millisecond.
// 从给定的年、月、日、毫秒创建 Carbon 实例
func X创建并按年月日毫秒(年, 月, 日, 毫秒 int, 时区 ...string) *Carbon {
	return create(年, 月, 日, 0, 0, 0, 毫秒*1e6, 时区...)
}

// CreateFromDateMicro creates a Carbon instance from a given date and microsecond.
// 从给定的年、月、日、微秒创建 Carbon 实例
func X创建并按年月日微秒(年, 月, 日, 微秒 int, 时区 ...string) *Carbon {
	return create(年, 月, 日, 0, 0, 0, 微秒*1e3, 时区...)
}

// CreateFromDateNano creates a Carbon instance from a given date and nanosecond.
// 从给定的年、月、日、纳秒创建 Carbon 实例
func X创建并按年月日纳秒(年, 月, 日, 纳秒 int, 时区 ...string) *Carbon {
	return create(年, 月, 日, 0, 0, 0, 纳秒, 时区...)
}

// CreateFromTime creates a Carbon instance from a given time(year, month and day are taken from the current time).
// 从给定的时、分、秒创建 Carbon 实例(年、月、日取自当前时间)
func X创建并按时分秒(时, 分, 秒 int, 时区 ...string) *Carbon {
	year, month, day := X创建并按当前时间(时区...).X取年月日()
	return create(year, month, day, 时, 分, 秒, 0, 时区...)
}

// CreateFromTimeMilli creates a Carbon instance from a given time and millisecond(year, month and day are taken from the current time).
// 从给定的时、分、秒、毫秒创建 Carbon 实例(年、月、日取自当前时间)
func X创建并按时分秒毫秒(时, 分, 秒, 毫秒 int, 时区 ...string) *Carbon {
	year, month, day := X创建并按当前时间(时区...).X取年月日()
	return create(year, month, day, 时, 分, 秒, 毫秒*1e6, 时区...)
}

// CreateFromTimeMicro creates a Carbon instance from a given time and microsecond(year, month and day are taken from the current time).
// 从给定的时、分、秒、微秒创建 Carbon 实例(年、月、日取自当前时间)
func X创建并按时分秒微秒(时, 分, 秒, 微秒 int, 时区 ...string) *Carbon {
	year, month, day := X创建并按当前时间(时区...).X取年月日()
	return create(year, month, day, 时, 分, 秒, 微秒*1e3, 时区...)
}

// CreateFromTimeNano creates a Carbon instance from a given time and nanosecond(year, month and day are taken from the current time).
// 从给定的时、分、秒、纳秒创建 Carbon 实例(年、月、日取自当前时间)
func X创建并按时分秒纳秒(时, 分, 秒, 纳秒 int, 时区 ...string) *Carbon {
	year, month, day := X创建并按当前时间(时区...).X取年月日()
	return create(year, month, day, 时, 分, 秒, 纳秒, 时区...)
}

// creates a Carbon instance from a given date, time and nanosecond.
// 从给定的年、月、日、时、分、秒、纳秒创建 Carbon 实例
func create(year, month, day, hour, minute, second, nanosecond int, timezone ...string) *Carbon {
	c := X创建()
	if len(timezone) > 0 {
		c.loc, c.X错误 = parseTimezone(timezone[0])
	}
	if c.X是否有错误() {
		return c
	}
	c.time = time.Date(year, time.Month(month), day, hour, minute, second, nanosecond, c.loc)
	return c
}
